package com.ibm.framework.exception.model;

import java.io.Serializable;

/**
 * 原始异常信息类
 * 
 * 封装了没有提取前的原始异常类Throwable
 * 
 * @author matrixgan
 * 
 */
public class RawExceptionInfo implements Serializable {
	/**
	 * serialVersionUID 
	 */
    private static final long serialVersionUID = 1498351624078388956L;
    /**
     * 被拦截的类
     */
    private String interceptedClass;
    
    /**
     * 被拦截的借口
     */
    private String interceptedInterface;
    
    /**
     * 异常参数
     */
    private Object[] parameterValue;
    
    /**
     * 异常
     */
    private Throwable throwable;

    /**
     * 构造方法
     */
    public RawExceptionInfo() {

    }

    /**
     * 构造方法
     * @param interceptedClass 拦截现场类
     * @param interceptedInterface 拦截现场接口
     * @param parameterValue 参数值
     * @param throwable 异常原因
     */
    public RawExceptionInfo(String interceptedClass, String interceptedInterface, Object[] parameterValue,
            Throwable throwable) {
        this.interceptedClass = interceptedClass;
        this.interceptedInterface = interceptedInterface;
        this.parameterValue = parameterValue.clone();
        this.throwable = throwable;
    }

    /**
     * 构造方法
     * @param throwable 异常
     */
    public RawExceptionInfo(Throwable throwable) {
        this.throwable = throwable;
    }

    /**
     * 
     * 功能描述: <br>
     * 〈功能详细描述〉
     * 获取拦截现场类
     * @return 拦截现场类
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public String getInterceptedClass() {
        return interceptedClass;
    }

    /**
     * 
     * 功能描述: <br>
     * 〈功能详细描述〉
     * 设置拦截现场类
     * @param interceptedClas 拦截现场类
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public void setInterceptedClass(String interceptedClass) {
        this.interceptedClass = interceptedClass;
    }

    /**
     * 
     * 功能描述: <br>
     * 〈功能详细描述〉
     * 获取拦截现场接口
     * @return 拦截现场接口
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public String getInterceptedInterface() {
        return interceptedInterface;
    }

    /**
     * 
     * 功能描述: <br>
     * 〈功能详细描述〉
     * 设置拦截现场接口
     * @param interceptedInterface 拦截现场接口
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public void setInterceptedInterface(String interceptedInterface) {
        this.interceptedInterface = interceptedInterface;
    }

    /**
     * 
     * 功能描述: <br>
     * 〈功能详细描述〉
     * 获取参数值
     * @return 参数值
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public Object[] getParameterValue() {
        return parameterValue;
    }

    /**
     * 
     * 功能描述: <br>
     * 〈功能详细描述〉
     * 设置参数值
     * @param parameterValue 参数值
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public void setParameterValue(Object[] parameterValue) {
        this.parameterValue = parameterValue.clone();
    }

    /**
     * 
     * 功能描述: <br>
     * 〈功能详细描述〉
     * 获取异常原因
     * @return 异常原因
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public Throwable getThrowable() {
        return throwable;
    }

    /**
     * 
     * 功能描述: <br>
     * 〈功能详细描述〉
     * 设置异常原因
     * @param throwable 异常原因
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public void setThrowable(Throwable throwable) {
        this.throwable = throwable;
    }
}
